﻿using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using FBWMS.Properties;

namespace FBWMS
{
    public partial class F_COM_ShortCut : Form
    {
        /// <summary>
        /// コピー元のexeパス
        /// </summary>
        private string str_TargetPath = string.Empty;

        /// <summary>
        /// コピー先のデスクトップリンクパス
        /// </summary>
        private string str_DeskTopLink = G_CommonClassSystem.G_System_GetDeskTopPath().ToString() + "\\" + G_CommonDefine.G_StartUpLink;

        /// <summary>
        /// スタートアップリンク格納先フォルダパス
        /// </summary>
        private string str_StartUpFolder = "C:\\Documents and Settings\\" + Environment.UserName + "\\スタート メニュー\\プログラム\\" + G_CommonDefine.G_StartUpFolder;

        /// <summary>
        /// スタートアップリンク名
        /// </summary>
        private string str_StartUpFile = "\\" + G_CommonDefine.G_StartUpLink;

        /// <summary>
        /// コピー先のクイックランチリンクパス
        /// </summary>
        private string str_QuickLunchLink = "C:\\Documents and Settings\\" + Environment.UserName + "\\Application Data\\Microsoft\\Internet Explorer\\Quick Launch\\" + G_CommonDefine.G_StartUpLink;

        ////////////////////////////////////////////////////////////////////////////
        //
        //初期処理
        //
        ////////////////////////////////////////////////////////////////////////////
        public F_COM_ShortCut()
        {
            try
            {
                //ログ書込み
                G_CommonClassSystem.G_System_SetLog(G_CommonDefine.LogMode.ProcStart, Resources.F_COM_ShortCut, "F_COM_ShortCut");

                //初期処理
                InitializeComponent();

                //現在のプロセスを取得
                Process process = Process.GetCurrentProcess();

                //デバッグの際は処理を中止
                if (0 < process.ProcessName.ToString().IndexOf(".vshost"))
                {
                    MessageBox.Show(Resources.テハックてはショートカットの設定はてきません, Resources.エラー, MessageBoxButtons.OK, MessageBoxIcon.Error);

                    this.Close();

                    return;
                }

                this.str_TargetPath = G_CommonClassSystem.G_System_GetCommonPath().ToString() + "\\\\" + process.ProcessName.ToString() + ".exe";

                if (File.Exists(this.str_DeskTopLink))
                {
                    this.rdo_DeskTop_Yes.Checked = true;
                }
                else
                {
                    this.rdo_DeskTop_No.Checked = true;
                }

                if (File.Exists(this.str_StartUpFolder + this.str_StartUpFile))
                {
                    this.rdo_StartUp_Yes.Checked = true;
                }
                else
                {
                    this.rdo_StartUp_No.Checked = true;
                }

                if (File.Exists(this.str_QuickLunchLink))
                {
                    this.rdo_QuickLunch_Yes.Checked = true;
                }
                else
                {
                    this.rdo_QuickLunch_No.Checked = true;
                }

                //ToolTipの設定
                G_CommonDefine.G_tt_ToolTip.RemoveAll();
                G_CommonDefine.G_tt_ToolTip.SetToolTip(this.btn_Set, "F5");

                //ログ書込み
                G_CommonClassSystem.G_System_SetLog(G_CommonDefine.LogMode.ProcEnd, Resources.FCOMShortCut初期処理終了, "F_COM_ShortCut");
            }
            catch (Exception err)
            {
                //ログ書込み
                G_CommonClassSystem.G_System_SetLog(G_CommonDefine.LogMode.Error, Resources.FCOMShortCut初期処理エラー + err.Message, "F_COM_ShortCut");

                //エラーメッセージ表示
                MessageBox.Show(Resources.FCOMShortCut初期処理エラー + err.Message, Resources.エラー, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #region イベントハンドラ ***********************************************************

        ////////////////////////////////////////////////////////////////////////////
        //
        //設定ボタンクリック時処理
        //
        ////////////////////////////////////////////////////////////////////////////
        private void btn_Set_Click(object sender, EventArgs e)
        {
            try
            {
                if (DialogResult.Cancel == MessageBox.Show(Resources.設定しますよろしいてすか, Resources.確認, MessageBoxButtons.OKCancel, MessageBoxIcon.Question))
                {
                    return;
                }

                //待機画面の表示
                G_CommonClassOther.G_Other_WaitForm(true);

                //ログ書込み
                G_CommonClassSystem.G_System_SetLog(G_CommonDefine.LogMode.ProcStart, Resources.Btn_Set_Click, "btn_Set_Click");

                //ショートカット設定処理
                this.P_Set_ShortCut();

                MessageBox.Show(Resources.設定か完了しました);

                //ログ書込み
                G_CommonClassSystem.G_System_SetLog(G_CommonDefine.LogMode.ProcEnd, Resources.BtnSetClick処理終了, "btn_Set_Click");

                this.Close();
            }
            catch (Exception err)
            {
                //ログ書込み
                G_CommonClassSystem.G_System_SetLog(G_CommonDefine.LogMode.Error, Resources.BtnSetClick処理エラー + err.Message, "btn_Set_Click");

                //エラーメッセージ表示
                MessageBox.Show(Resources.BtnSetClick処理エラー + err.Message, Resources.エラー, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                if (G_CommonDefine.G_F_COM_Waiting != null)
                {
                    //待機画面の解除
                    G_CommonClassOther.G_Other_WaitForm(false);
                }
            }
        }

        ////////////////////////////////////////////////////////////////////////////
        //
        //デスクトップラジオボタンクリック時処理
        //
        ////////////////////////////////////////////////////////////////////////////
        private void rdo_DeskTopChange(object sender, EventArgs e)
        {
            if (this.rdo_DeskTop_Yes.Checked == true)
            {
                this.rdo_DeskTop_Yes.ForeColor = Color.Blue;
                this.rdo_DeskTop_No.ForeColor = Color.Gray;
            }
            else
            {
                this.rdo_DeskTop_Yes.ForeColor = Color.Gray;
                this.rdo_DeskTop_No.ForeColor = Color.Red;
            }
        }

        ////////////////////////////////////////////////////////////////////////////
        //
        //スタートアップラジオボタンクリック時処理
        //
        ////////////////////////////////////////////////////////////////////////////
        private void rdo_StartUpChange(object sender, EventArgs e)
        {
            if (this.rdo_StartUp_Yes.Checked == true)
            {
                this.rdo_StartUp_Yes.ForeColor = Color.Blue;
                this.rdo_StartUp_No.ForeColor = Color.Gray;
            }
            else
            {
                this.rdo_StartUp_Yes.ForeColor = Color.Gray;
                this.rdo_StartUp_No.ForeColor = Color.Red;
            }
        }

        ////////////////////////////////////////////////////////////////////////////
        //
        //クイックランチラジオボタンクリック時処理
        //
        ////////////////////////////////////////////////////////////////////////////
        private void rdo_QuickLunchChange(object sender, EventArgs e)
        {
            if (this.rdo_QuickLunch_Yes.Checked == true)
            {
                this.rdo_QuickLunch_Yes.ForeColor = Color.Blue;
                this.rdo_QuickLunch_No.ForeColor = Color.Gray;
            }
            else
            {
                this.rdo_QuickLunch_Yes.ForeColor = Color.Gray;
                this.rdo_QuickLunch_No.ForeColor = Color.Red;
            }
        }       

        #endregion *************************************************************************

        #region プライベート関数 ***********************************************************

        /// <summary>
        /// ショートカット設定処理
        /// </summary>
        private void P_Set_ShortCut()
        {
            if (this.rdo_DeskTop_Yes.Checked == true)
            {
                //デスクトップにショートカット作成
                G_CommonClassShortCut.G_ShortCut_SetShortCut(this.str_DeskTopLink, "FBWMS", @str_TargetPath);
            }
            else
            {
                //デスクトップにショートカットがある際は削除
                if (File.Exists(this.str_DeskTopLink))
                {
                    File.Delete(this.str_DeskTopLink);
                }
            }

            //スタートアップ
            if (this.rdo_StartUp_Yes.Checked == true)
            {
                //スタートアップにフォルダがない際は生成
                if (!Directory.Exists(this.str_StartUpFolder))
                {
                    Directory.CreateDirectory(this.str_StartUpFolder);
                }

                //スタートアップにショートカット作成
                G_CommonClassShortCut.G_ShortCut_SetShortCut(this.str_StartUpFolder + this.str_StartUpFile, "FBWMS", @str_TargetPath);
            }
            else
            {
                //スタートアップにショートカットがある際は削除
                if (File.Exists(this.str_StartUpFolder + this.str_StartUpFile))
                {
                    File.Delete(this.str_StartUpFolder + this.str_StartUpFile);
                }

                //スタートアップにフォルダがある際は削除
                if (Directory.Exists(this.str_StartUpFolder))
                {
                    Directory.Delete(this.str_StartUpFolder);
                }
            }

            //クイックランチ
            if (this.rdo_QuickLunch_Yes.Checked == true)
            {
                //クイックランチにショートカット作成
                G_CommonClassShortCut.G_ShortCut_SetShortCut(this.str_QuickLunchLink, "FBWMS", @str_TargetPath);
            }
            else
            {
                //クイックランチにショートカットがある際は削除
                if (File.Exists(this.str_QuickLunchLink))
                {
                    File.Delete(this.str_QuickLunchLink);
                }
            }
        }

        #endregion *************************************************************************

        #region フォーム共通処理 ***********************************************************

        ////////////////////////////////////////////////////////////////////////////
        //
        //ショートカットキー処理
        //
        ////////////////////////////////////////////////////////////////////////////
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (this.cc_ShortcutKeyHelper1.PerformClickByKeys(keyData))
            {
                return true;
            }

            return base.ProcessCmdKey(ref msg, keyData);
        }

        ////////////////////////////////////////////////////////////////////////////
        //フォームKeyDown時処理
        //(エンターを押した際に次のコントロールに移動する。)
        //(フォームの『KeyPreview』を『true』にすること)
        ////////////////////////////////////////////////////////////////////////////
        private void F_COM_ShortCut_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (!e.Control)
                {
                    this.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);
                }
            }
        }

        #endregion *************************************************************************        

    }
}